package com.adcc.swingui.base;

import java.awt.Container;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JComponent;

import org.apache.log4j.Logger;
/**
 * 状态栏按钮超类
 * 这个类的子类最好不要被外部的类直接依赖。
 * 外部类如果想要改变状态，通过这个抽象父类提供的静态方法(目前不支持，以后如果业务需要扩展)
 * 最好是子类主动去获取外部的各种状态（通过监听器实现外部信息获取）
 * @author charlie
 *
 */
public abstract class DefaultStatusBar  {
	private static Logger logger = Logger.getLogger(DefaultStatusBar.class);
	
	/**
	 * 状态栏map
	 */
	protected static Map<String, DefaultStatusBar> statusMap = new HashMap<String, DefaultStatusBar>();
	/**
	 * 状态栏源
	 */
	protected JComponent sourceComp ;
	/**
	 * swing框架容器
	 */
	protected Container container;
	/**
	 * 名称
	 */
	protected String name = this.getClass().getName();
	
	public DefaultStatusBar(Container container) {
		this.container = container;
	}
	/**
	 * 需要被重写工具构造器
	 * @return
	 */
	protected abstract JComponent build();
	/**
	 * 国际化
	 */
	protected abstract void i18n();
	/**
	 * 外部调用工具构造器
	 * @param name 控件名称
	 * @return
	 */
	public JComponent buildButton(String name) {
		this.sourceComp = build();
		i18n();
		if(statusMap.containsKey(name)) {
			logger.warn(name + "状态栏缓存map对象已经存在");
		}
		statusMap.put(name, this);
		return this.sourceComp;
	}
	
	/**
	 * 获取源
	 * @return
	 */
	public JComponent getSourceComp() {
		return sourceComp;
	}

	public static Map<String, DefaultStatusBar> getStatusMap() {
		return statusMap;
	}
}
